<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>call继承(借用构造函数继承)</title>
</head>
<body>
<script>
    /*
    * 继承 子类继承父类的属性和方法
    * 目的 可以让子类的 实例 能够使用父类的属性和方法
    *   父类 A
    *   子类 B
    * */
    //类 ==> 构造函数


    //call继承(借用构造函数继承)
    //在子类构造函数中把父类构造函数当作普通的函数执行, 并且通过call方法把父类构造函数中的this替换成子类的实例(this), 这样相当于给子类实例设置了私有的属性和方法

    /*
    * 特点:
    *   1.只能继承父类私有的属性和方法(因为只是把父类构造函数当作普通函数执行了一次,跟父类的原型上的方法和属性没有任何关系)
    *   2.父类的私有的属性和方法 都会变成子类私有的属性和方法
    * */

    //父类
    function A(x) {
        this.x = x;
        this.seyHello = function (){
            console.log("hello world");
        }
    }
    A.prototype.getX = function () {
        console.log(this.x);
    }

    let a = new A(100);

    // A(100);//this => window

    //子类
    function B(y,x) {
        this.y = y; //this ==> b

        // A(100);//this => window
        A.call(this, x);//this => b

        // this.x = x

    }
    B.prototype.getY = function () {
        console.log(this.y);
    }

    let b = new B(200, 100);
    console.log(b)

    // b = {y:200, x:100}


</script>
</body>
</html>